#ifndef RTP_PARSE_FEEDBACK_PS_FIR_H
#define RTP_PARSE_FEEDBACK_PS_FIR_H

#include "rtp/Feedback.h"
#include "rtp/FeedbackItem.h"
#include "rtp/FeedbackPs.h"

namespace Rtp {
    namespace Rtcp {
        class FeedbackPsFirItem: public FeedbackItem {
        public:
            struct Header {
                uint32_t ssrc;
                uint8_t sequenceNumber;
                uint32_t reserved: 24;
            };
        public:
            static const size_t HeaderSize = 8;
            static const FeedbackPs::MessageType messageType { FeedbackPs::MessageType::FIR };

        public:
            explicit FeedbackPsFirItem(Header *header): header(header) {}
            explicit FeedbackPsFirItem(FeedbackPsFirItem* item): header(item->header) {}

            FeedbackPsFirItem(uint32_t ssrc, uint8_t sequenceNumber);
            ~FeedbackPsFirItem() override = default;

            uint32_t GetSsrc() const {
                return uint32_t { ntohl(this->header->ssrc) };
            }

            uint8_t GetSequenceNumber() const {
                return this->header->sequenceNumber;
            }

        public:
            void Dump() const override;
            size_t Serialize(uint8_t* buffer) override;
            size_t GetSize() const override {
                return FeedbackPsFirItem::HeaderSize;
            }
        private:
            Header *header { nullptr };
        };

        using FeedbackPsFirPacket = FeedbackPsItemsPacket<FeedbackPsFirItem>;
    }
}

#endif